AWSで扱っている日付時刻データフォーマットいろいろ
こんにちは。サービス開発室の武田です。
AWSを利用しているとさまざまなところで「日付時刻データ」を目にします。AWSの各サービスで提供されている日付時刻データは次のいずれかのフォーマットです。
- ISO 8601
- UNIX時間
ISO 8601は日付・時刻を表記するための国際規格です。日付 T 時刻 タイムゾーン
が並べられた文字列です。基本形式と拡張形式が定義されていますが、AWSでは拡張形式が一般的かと思われます。
- 基本形式:
20240627T000000Z
- 拡張形式:
2024-06-27T00:00:00Z
末尾のZ
はタイムゾーンでZ
はUTCを表します。日本時間の場合は+09:00
などが代わりに付きます。
ISO 8601は文字列による表現でしたが、UNIX時間は数値による表現です。UNIX時間はエポック秒とも呼ばれ、 UTCでの 1970年1月1日午前0時0分0秒 からの経過秒数を表します。たとえば先ほどの2024-06-27T00:00:00Z
は、UNIX時間では1719446400
となります。
さてここまでUNIX時間の「エポック秒」というものを紹介しましたが、実は「エポックミリ秒」や「エポックマイクロ秒」などもあります。その名のとおり、経過ミリ秒数や経過マイクロ秒数で表したものです。
- エポック秒:
1719446400
- エポックミリ秒:
1719446400000
- エポックマイクロ秒:
1719446400000000
なお、エポックミリ秒は 1000で割れば小数点含むエポックミリ秒になります 。1719446400111
と1719446400.111
は見方によっては 同じデータとみなせる わけですね。ややこしくなってきましたね?
AWSでの日付時刻フォーマット例
日付時刻データの表し方を説明してきました。「まぁそれくらいなら知ってるよ」という方も多いでしょう。それでは具体例として、AWSで採用されているフォーマットを確認してみましょう。あくまで身の回りを探して見つけたものです。みなさんもいろいろ確認してみてください。
ISO 8601、秒、UTC
EventBridgeのイベントから送られてくるデータのtime
がこれでした。
具体例: 2019-02-26T19:42:21Z
ISO 8601、ミリ秒、UTC
Step Functionsのコンテキストデータに含まれるStartTime
がこれでした。
具体例: 2019-03-26T20:14:13.192Z
ISO 8601、秒、JST
$ aws health describe-events --region us-east-1
を叩いた結果のstartTime
がこれでした。ただしドキュメントを読む限りは、このフィールドは小数点含むエポック秒のようです。
具体例: 2024-06-26T11:20:00+09:00
ISO 8601、ミリ秒、JST
$ aws health describe-events --region us-east-1
を叩いた結果のlastUpdatedTime
がこれでした。ただしドキュメントを読む限りは、このフィールドは小数点含むエポック秒のようです。
具体例: 2024-06-26T15:26:31.196000+09:00
エポック秒
DynamoDBのTTLはエポック秒で保存する必要があります。
具体例: 1547152440
エポックミリ秒
EventBridgeから送られてくるStep Functionsイベントの詳細情報がこれでした。
具体例: 1547148840101
まとめ
aws health describe-events
の結果に含まれる日付時刻データのフォーマットが想定と異なるのは、AWS CLIで何かやっているということなんでしょうか?この辺、知見ある方教えてください。
日付時刻データの表現の違いと、実際にAWSで採用されているケースを個別に見てみました。ただデータを「見る」だけであれば、これらの違いはあまり影響がないでしょう。しかしプログラムなどで何か処理をしようとすると、これらを意識しないといけなくなります。
次回は日付時刻データを相互運用する際のコードを、Pythonを例に確認しましょう。